//栗子
<!--
1. 依次输出什么?
gb: undefined
fb: 1
fb: 2
fb: 3
fe: 3
fe: 2
fe: 1
ge: 1
2. 整个过程中产生了几个执行上下文?  5
-->
<script type="text/javascript">
    console.log('gb: ' + i)
    var i = 1
    foo(1)

    function foo(i) {
        if (i == 4) {
            return
        }
        console.log('fb:' + i)
        foo(i + 1) //递归调用: 在函数内部调用自己
        console.log('fe:' + i) //出栈 所以会 3 2 1这样的结果
    }
    console.log('ge: ' + i)
</script>